package com.twq.collection.list

/**
 * Created by tangweiqun on 2017/12/10.
 */
object ConstructList {
  def main(args: Array[String]): Unit = {
    //1、List的构建，调用List伴生对象的apply方法来构建
    //List是不可变的
    val fruit = List("apples", "oranges", "pears")
    val nums = List(1, 2, 3, 4)
    val diag3 =
      List(
        List(1, 0, 0),
        List(0, 1, 0),
        List(0, 0, 1)
      )
    val empty = List()


    //2、List含有一个类型参数 - List[+T]
    //而且List是协变的，也就是说，如果类型S是类型T的子类的话，那么List[S]就是List[T]的子类
    //List[String]是List[Any]的子类

    //2.1、一个empty的List的类型是List[Nothing]，而Nothing是scala类型体系中的Bottom Type
    //所以List[Nothing]是所有List的子类
    //也就是说，我们可以将空的List赋值给任何类型List的值，如下：
    val listInt: List[Int] = List()
    val listStr: List[String] = List()

    //3、List的两个基本代码要素是：Nil和::
    //Nil表示空的List
    //::是一个插入运算符，表示向一个List的前面插入某个元素
    val fruit1 = "apples" :: ("oranges" :: ("pears" :: Nil))
    val nums1 = 1 :: (2 :: (3 :: (4 :: Nil)))
    val diag31 = (1 :: (0 :: (0 :: Nil))) ::
      (0 :: (1 :: (0 :: Nil))) ::
      (0 :: (0 :: (1 :: Nil))) :: Nil
    val empty1 = Nil

  }
}

